﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using fideeraSoft.DAO;
using System.Data.SqlClient;
using fideeraSoft.Utils;
using fideeraSoft.Entities;

namespace fideeraSoft.DAOimpl
{
    public class Produccion_X_MatPrimaDAOSQLimpl : Produccion_X_MatPrimaDAO
    {

        #region BUSCAR ULTIMO ID DE Produccion X MATERIA PRIMA
        public int buscarNuevoUltimoIdProduccionXMatPrimaBD()
        {
            int ID = 0;
            SqlConnection conn = SQLclass.conectarSQL();
            try
            {
                conn.Open();

                string query = "SELECT TOP 1 ID FROM Produccion_X_MateriaPrima ORDER BY ID DESC ";
                SqlCommand cmd = new SqlCommand(query, conn);

                SQLclass.commandQuery(conn, cmd, query);
                SqlDataReader reader = cmd.ExecuteReader();

                if (reader.HasRows)
                {

                    while (reader.Read())
                    {
                        ID = reader.GetInt32(0);
                        //  CLogger.Append("[buscarNuevoUltimoIdProveedorEnBD] ID : " + ID, CLogger.ERROR);      //DEBUG
                    }
                    ID++;
                }
                else
                {
                    ID = 1;
                }
            }
            catch (Exception e)
            {
                CLogger.Append("[buscarNuevoUltimoIdProduccionXMatPrimaBD] Exception : " + e, CLogger.ERROR);      //DEBUG
                throw new MiException("[buscarNuevoUltimoIdProduccionXMatPrimaBD] Exception: " + e);
            }
            finally
            {
                conn.Close();
            }
            // CLogger.Append("[buscarNuevoUltimoIdProveedorEnBD] RETURN ID : " + ID, CLogger.ERROR);      //DEBUG
            return ID;
        }

        #endregion
               

        #region ALTA PRODUCCION  X MATERIA PRIMA
        public void  altaProduccionXMatPrima(Produccion_X_MateriaPrima prodXMatPrim)
        {
            SqlConnection conn = null;
            try
            {
                conn = SQLclass.conectarSQL();
                conn.Open();

                string query = "SET IDENTITY_INSERT Produccion_X_MateriaPrima ON; INSERT INTO Produccion_X_MateriaPrima(ID,produccion,materiaPrima,cantidad,lote,unidad) VALUES (@Id,@IdProduccion,@IdMateriaPrima,@Cantidad,@IdLote,@Unidad)";

                SqlCommand cmd = new SqlCommand(query, conn);

                cmd.Parameters.AddWithValue("@Id", prodXMatPrim.Id);
                cmd.Parameters.AddWithValue("@IdProduccion", prodXMatPrim.Produccion);
                cmd.Parameters.AddWithValue("@IdMateriaPrima", prodXMatPrim.MateriaPrima);
                cmd.Parameters.AddWithValue("@IdLote", prodXMatPrim.IdLote);
                cmd.Parameters.AddWithValue("@Cantidad", prodXMatPrim.Cantidad);
                cmd.Parameters.AddWithValue("@Unidad", prodXMatPrim.Unidad);

                cmd.ExecuteNonQuery();
                //cmd.Parameters.Clear();
                // cmd.CommandText = "SELECT @@IDENTITY";
                // int insertID=Convert.ToInt32(cmd.ExecuteScalar());

                //  cmd.Dispose();
                cmd = null;

            }
            catch (Exception e)
            {
                CLogger.Append("[altaProduccionXMatPrima] Exception alta: " + e, CLogger.ERROR);      //DEBUG
                throw new MiException("[altaProduccionXMatPrima] Exception alta: " + e);
            }
            finally
            {
                conn.Close();
            }

        }

        #endregion




        #region Eliminar PRODUCCION X MATERIA PRIMA POR ID
        public void eliminarProduccionXMateriasPrimasPorId(int id)
        {
            SqlConnection conn = SQLclass.conectarSQL();
            try
            {
                conn.Open();

                string query = "DELETE FROM Produccion_X_MateriaPrima WHERE ID='"+id.ToString()+"'";
                SqlCommand cmd = new SqlCommand(query, conn);
                cmd.ExecuteNonQuery();

            }
            catch (Exception e)
            {
                CLogger.Append("[eliminarProduccionXMateriasPrimasPorId] Exception : " + e, CLogger.ERROR);      //DEBUG
                throw new MiException("[eliminarProduccionXMateriasPrimasPorId] Exception: " + e);
            }
            finally
            {
                conn.Close();
            }
        }
        #endregion

        #region Eliminar TODA PRODUCCION X MATERIA PRIMA EN DB
        public void eliminarTodasLasProduccionesXMateriasPrimasEnDb()
        {
            SqlConnection conn = SQLclass.conectarSQL();
            try
            {
                conn.Open();

                string query = "DELETE FROM Produccion_X_MateriaPrima";
                SqlCommand cmd = new SqlCommand(query, conn);
                cmd.ExecuteNonQuery();

            }
            catch (Exception e)
            {
                CLogger.Append("[eliminarTodasLasProduccionesXMateriasPrimasEnDb] Exception : " + e, CLogger.ERROR);      //DEBUG
                throw new MiException("[eliminarTodasLasProduccionesXMateriasPrimasEnDb] Exception: " + e);
            }
            finally
            {
                conn.Close();
            }
        }
        #endregion


    }
}
